// 制作选项函数
var makeOptions = function (array, property,text) {
    var dataList = [];
    var d = [];
    for (let i = 0; i < array.length; i++) {
        d = d.concat(array[i][property]);
    }
    this.unique(d)
    for (let i = 0; i < d.length; i++) {
        
        dataList = dataList.concat({value: d[i], [text]: d[i] });
    }
    return dataList;
};


// 数组去重
var unique = function (arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {
                //第一个等同于第二个，splice方法删除第二个
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
};





function getType(target) {
    return Object.prototype.toString.call(target).slice(8,-1)
}



function arrUnique(a, b) {
    if(getType(a) !== 'Array' && getType(b) !== 'Array'){
       return false
    }
    if(a.length !== b.length){
       return false
    }
    for(let i = 0;i < a.length;i++){
       if(getType(a[i]) === 'Object' && getType(b[i]) === 'Object'){
            objUnique(a[i],b[i])
       }else if(getType(a[i]) === 'Array' && getType(b[i]) === 'Array'){
            arrUnique(a[i],b[i])
       }else if(a[i] !== b[i]){
            return false
       }
    }
    return true
}


function objUnique(a,b) {
    if(getType(a) !== 'Object' && getType(b) !== 'Object'){
        return false
    }
    let testList = Object.keys(a)
    for(let i = 0;i < testList.length;i++){
        let propName = testList[i]
        if(getType(a[propName]) === 'Object' && getType(b[propName]) === 'Object'){
            objUnique(a[propName],b[propName])
        }else if(getType(a[propName]) === 'Array' && getType(b[propName]) === 'Array'){
            arrUnique(a[propName],b[propName])
        }else if(a[propName] !== b[propName]){
            return false
        }
    }
    return true
}


var unique01=function (arr) {
    if(getType(arr) !== 'Array'){
        return null
    }
    // 基本数据类型容器
    let commonList = []
    // 对象收纳容器
    let objList = []
    // 数组收纳容器
    let arrList = []

    // 数据分类
    arr.forEach(item => {
        if(getType(item) === 'Object'){
            objList.push(item)
        }else if(getType(item) === 'Array'){
            arrList.push(item)
        }else{
            commonList.push(item)
        }
    })
    // 基本数据类型去重
    commonList = Array.from(new Set(commonList))
    // 对象收纳容器去重
    for(let i = 0;i < objList.length;i++){
        for(let j = i + 1;j < objList.length;j++){
            if(objUnique(objList[i],objList[j])){
                objList.splice(j,1)
                j--
            }
        }
    }
    // 数组收纳容器去重
    for(let i = 0;i < arrList.length;i++){
        for(let j = i + 1;j < arrList.length;j++){
            if(arrUnique(arrList[i],arrList[j])){
                arrList.splice(j,1)
                j--
            }
        }
    }
    // 合并收纳容器
    return [...commonList,...objList,...arrList]
}





exports.install = function (Vue) {
    Vue.prototype.makeOptions = makeOptions;
    Vue.prototype.unique = unique;
    Vue.prototype.unique01 = unique01;
    
};